package com.mexcad.db.utils;

import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;

public class Formatter {
	private static String[] meses = new String[]{"Enero", "Febrero", "Marzo", "Abril", "Mayo", "Junio", "Julio", "Agosto", "Septiembre", "Octubre", "Noviembre", "Diciembre"}; 
	private static String[] dias = new String[]{"", "Domingo", "Lunes", "Martes", "Miercoles", "Jueves", "Viernes", "Sabado", "Domingo"}; 
	
	/**
	 * Realiza un formateo de la fecha
	 * @param dateStr fecha con el formato dd/mm/YYYY 
	 * @return un objeto Date con la fecha recibida.
	 */
	
	public static Date getDateFromString(String dateStr){
		if (dateStr.equals(""))
			return null;

		int day=Integer.parseInt(dateStr.substring(0,dateStr.indexOf("/")));
		int month=Integer.parseInt(dateStr.substring(dateStr.indexOf("/")+1,dateStr.lastIndexOf("/")));
		int year=Integer.parseInt(dateStr.substring(dateStr.lastIndexOf("/")+1,dateStr.length()));
		Calendar calendar = new GregorianCalendar( year,  month-1, day);
		return calendar.getTime();
	}
	public static String getStringFromDate(Date date){
		if(date==null)
			return "";

		Calendar cal = Calendar.getInstance();
		cal.setTime(date);
		int day=cal.get(Calendar.DAY_OF_MONTH);
		int month=cal.get(Calendar.MONTH);
		int year=cal.get(Calendar.YEAR);
		
		return (day<10?"0"+day:day)+"/" + ((month+1)<10?"0"+(month+1):month+1) +"/" + +year;
	}
	
	public static String getStringFromHora(Date date){
		if(date==null)
			return "";

		Calendar cal = Calendar.getInstance();
		String tiempo;
		
		cal.setTime(date);
		int hora=cal.get(Calendar.HOUR);
		int minutos=cal.get(Calendar.MINUTE);
		int am_pm=cal.get(Calendar.AM_PM);
		
		//a las 12 aparece como 0 horas entonces hay que sumarle 12
		if(hora == 0){
			hora = 12;
		}
		tiempo = hora + ":" + (minutos < 10? "0" + minutos: minutos); 
		if (am_pm == 1){
			tiempo = tiempo + " PM";
		}else{
			tiempo = tiempo + " AM";
		}
			
		 
		return tiempo;
	}
	public static Date getHoraFromString(String time){
		if (time.equals(""))
			return null;
			
		//obtiene los componentes de la hora
		int hora = Integer.parseInt((time.substring(0, time.indexOf(":"))).trim());
		time = time.substring(time.indexOf(":")+ 1, time.length()).trim();
		int min = Integer.parseInt(time.substring(0, time.indexOf(" ")).trim());
		time = time.substring(time.indexOf(" ")+ 1, time.length()).trim();
		String am_pm = time.toUpperCase();
		
		//verifica que sea am o pm
		if (am_pm.equals("PM") && hora!=12){
			//se le suma 12 horas
			hora = hora + 12;
		} else if (am_pm.equals("AM") && hora==12){
			hora = 0;
		}
			
		Calendar cal = Calendar.getInstance();
		cal.set(0, 0, 0, hora, min, 0);
	
		return cal.getTime();
	}
	
	
	public static String getFechaActual(){
		String fecha = "";
		
		Calendar dFecha = Calendar.getInstance();
		int mes =dFecha.get(Calendar.MONTH)+1;
		int dia =dFecha.get(Calendar.DAY_OF_MONTH);
		String diaStr=(dia<10)?"0"+dia:""+dia;
		String mesStr=(mes<10)?"0"+mes:""+mes;
		
		
		//fecha = dias[dFecha.get(Calendar.DAY_OF_WEEK)] + "  " + dFecha.get(Calendar.DAY_OF_MONTH) + " de " + meses[dFecha.get(Calendar.MONTH)] + " del " + dFecha.get(Calendar.YEAR); 
		fecha =  mesStr +"/"+diaStr+ "/" + + dFecha.get(Calendar.YEAR); 
		
		return fecha;
	}
	
	public static Date getFechaHoraActual(){
		Calendar dFecha = Calendar.getInstance();
		
		
		return dFecha.getTime();
	}
	
	public static Date getDate(){
		Calendar fecha = Calendar.getInstance();
		fecha.set(fecha.get(Calendar.YEAR), fecha.get(Calendar.MONTH), fecha.get(Calendar.DAY_OF_MONTH), 0, 0, 0);
		return fecha.getTime();
	}

	public static Date getTime(){
		Calendar hora = Calendar.getInstance();
		hora.set(0, 0, 0, hora.get(Calendar.HOUR_OF_DAY), hora.get(Calendar.MINUTE), hora.get(Calendar.SECOND));
		return hora.getTime();
	}

	public static String getHoraActual(){
		String hora = "";
		
		Calendar dFecha = Calendar.getInstance();
		hora = String.valueOf(dFecha.get(Calendar.HOUR_OF_DAY)) + ':' + String.valueOf(dFecha.get(Calendar.MINUTE)) + ':' + String.valueOf(dFecha.get(Calendar.SECOND)) + '.' + String.valueOf(dFecha.get(Calendar.MILLISECOND));
		
		return hora;
	}
	
	public static String  getDateToday(){
		Calendar cal = Calendar.getInstance();
		
		int day=cal.get(Calendar.DAY_OF_MONTH);
		int month=cal.get(Calendar.MONTH);
		int year=cal.get(Calendar.YEAR);
		
		//return (day<10?"0"+day:day)+"/" + ((month+1)<10?"0"+(month+1):month+1) +"/" + +year;
		return ((month+1)<10?"0"+(month+1):month+1) + "/" + (day<10?"0"+day:day)+"/"  +year;
	}
	
	public static String fechaSistema(){
		Calendar cal = Calendar.getInstance();

		int day=cal.get(Calendar.DAY_OF_MONTH);
		int month=cal.get(Calendar.MONTH);
		int year=cal.get(Calendar.YEAR);
		return((day<10?"0"+day:day)+"/" + ((month+1)<10?"0"+(month+1):month+1) +"/" + +year);
		
	}
	
	public static String formateaFechaMMDDAAAA(String cadena){
		//recibe el formato de dd/mm/aaaa y lo debe de cambiar a mm/dd/aaaa
		String mes = cadena.substring(0, cadena.indexOf("/"));
		cadena =cadena.substring(cadena.indexOf("/") + 1 , cadena.length());
		String dia = cadena.substring(0,cadena.indexOf("/"));
		String anio = cadena.substring(cadena.indexOf("/") + 1 , cadena.length());
		
		return ( dia  + "/" +  mes + "/" + anio);
	}
	
	public static  String obtieneAnioActual(){
		return Formatter.fechaSistema().substring(6, Formatter.fechaSistema().length());
	}
	
	public static String obtieneMes(Date fecha){
				
		int mesInt = fecha.getMonth();
		
		for(int i=0; i < meses.length ;i++){
			if( i == mesInt){
				return meses[i];
			}
		}
		return "";
	}
	
	public static String getMesDeInt(int indice){
		return meses[indice];
	}
	
	public static void main(String []arg){
		System.out.println(getFechaActual());
		
	}
}
